perm filename UTIL.SAI[SYS,HE] blob
sn#057822 filedate 1973-08-14 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00002 00002 ENTRY DATIM,DATIN,DATOUT,LPTDMP
00005 00003 ⊃ Returns string equivalent to monitor DAYTIME command
00007 00004 ⊃ Inputs individual data sets
00009 00005 ⊃ outputs individual data sets
00011 00006 ⊃ inputs and outputs composite data sets
00013 00007 ⊃ open and read or write entire composite file
00015 00008 ⊃ prints selected portions of data structure
00020 ENDMK
⊗;
ENTRY DATIM,DATIN,DATOUT,LPTDMP;
BEGIN "UTIL" COMMENT Utility routines for CAMGEN and COLECT;
DEFINE DATA="3",LPT="4",⊃="COMMENT",CRLF="'15&'12",FF="'14",SAFEX="SAFE";
INTERNAL INTEGER SETNUM,LENS,DATE,TIME,CAMNOM,LPTCH,BREAK,LPTON,SETFLG;
INTERNAL REAL PPOT0,PPOTD,TPOT0,TPOTD,FPOT0,FPOTD,TOLER,FOCAL,OFFSET,FSCALE,
ZPOT0,ZPOTD,FMX,FMY,MRAT,PAN,TILT,SWING,CALERR,PANPTR,TILPTR,
FOCPTR,ZOOPTR,MFOCNM,POLERR,REFPTR,GROREF,DEV;
SAFEX INTERNAL REAL ARRAY XX[1:3,1:6],YY[1:2,1:6];
SAFEX INTERNAL REAL ARRAY DP[1:3],C,P0[1:3],COEFF,PP[1:2];
SAFEX INTERNAL INTEGER ARRAY SAVBUF, STNBUF[0:50];
⊃ Takes list of set numbers from keyboard
And stores them in STNBUF[1:STNBUF[0]]
If null string given, exit with old numbers;
INTERNAL PROCEDURE GTSETS;
BEGIN
INTEGER I,LBD,HBD,SPTR,COLON;
LABEL START;
STRING TEMP;
START: BREAK←SPTR←COLON←0;
OUTSTR("SET NUMBERS = ");
TEMP←INCHWL;
IF ¬LENGTH(TEMP) THEN RETURN;
DO BEGIN
IF BREAK=":" THEN
BEGIN LBD←STNBUF[SPTR];COLON←1;END;
SPTR←SPTR+1;
STNBUF[SPTR]←INTSCAN(TEMP,BREAK);
IF COLON THEN
BEGIN
COLON←0;
HBD←STNBUF[SPTR];
SPTR←SPTR-1;
FOR I←LBD+1 STEP 1 UNTIL HBD DO
BEGIN
SPTR←SPTR+1;
STNBUF[SPTR]←I;
END;
END;
END UNTIL BREAK=0;
IF ¬SPTR THEN GO START ELSE STNBUF[0]←SPTR;
END;
⊃ Returns string equivalent to monitor DAYTIME command;
INTERNAL STRING PROCEDURE DATIM;
BEGIN
INTEGER MO,DAY,YR,HRS,MIN,SEC,TDATE,TTIME;
STRING MOS,TEM;
SETFORMAT(-2,0);
TDATE←DATE;
TTIME←TIME;
DAY←(TDATE MOD 31)+1;
TDATE←TDATE%31;
MO←(TDATE MOD 12)+1;
YR←1964+TDATE%12;
SEC←TTIME MOD 60;
TTIME←TTIME%60;
MIN←TTIME MOD 60;
HRS←TTIME%60;
MOS←CASE MO-1 OF ("JAN","FEB","MAR","APR","MAY","JUN",
"JUL","AUG","SEP","OCT","NOV","DEC");
TEM←CVS(DAY)&"-"&MOS&"-"&CVS(YR)&" "&CVS(HRS)&CVS(MIN)&":"&
CVS(SEC);
SETFORMAT(0,6);
RETURN(TEM);
END "DATIM";
⊃ Inputs individual data sets;
INTERNAL PROCEDURE DATIN;
BEGIN INTEGER BRK, EOF, FLAG;
STRING NAME;
DEFINE XFR(X)="ARRYIN(DATA,X,1)", AXFR(X,N)="ARRYIN(DATA,X,N)";
OPEN(DATA,"DSK",8,3,0,1000,BRK,EOF);
WHILE TRUE DO
BEGIN
NAME←"CAM"&CVS(SETNUM)&".CAL";
LOOKUP(DATA,NAME,FLAG);
IF FLAG THEN
BEGIN
OUTSTR("LOOKUP FAILED:"&NAME&CRLF&"SET#=");
SETNUM←CVD(INCHWL);
END ELSE DONE;
END;
OUTSTR(CRLF&"RETRIEVING "&NAME&CRLF);
XFR(MFOCNM);
XFR(CAMNOM);
XFR(LENS);
XFR(PANPTR);
XFR(TILPTR);
XFR(FOCPTR);
XFR(REFPTR);
IF CAMNOM=2 THEN BEGIN XFR(ZOOPTR); XFR(ZPOT0); XFR(ZPOTD); END;
AXFR("XX[1,1]",18);
AXFR("YY[1,1]",12);
XFR(PPOT0);
XFR(PPOTD);
XFR(TPOT0);
XFR(TPOTD);
XFR(FPOT0);
XFR(FPOTD);
XFR(FMX);
XFR(FMY);
XFR(MRAT);
XFR(PAN);
XFR(TILT);
XFR(SWING);
XFR(CALERR);
AXFR(C[1],3);
AXFR("PP[1]",2);
AXFR(P0[1],3);
AXFR("DP[1]",3);
XFR(DATE); XFR(TIME); XFR(GROREF);
XFR(FOCAL); XFR(OFFSET); XFR(FSCALE);
XFR(SAVBUF[0]);
IF SAVBUF[0]≠0 THEN AXFR(SAVBUF[1],SAVBUF[0]);
RELEASE(DATA);
END;
⊃ outputs individual data sets;
INTERNAL PROCEDURE DATOUT;
BEGIN INTEGER BRK, EOF,FLAG;
STRING NAME;
DEFINE XFR(X)="ARRYOUT(DATA,X,1)", AXFR(X,N)="ARRYOUT(DATA,X,N)";
OPEN(DATA,"DSK",8,0,3,1000,BRK,EOF);
NAME←"CAM"&CVS(SETNUM)&".CAL";
ENTER(DATA,NAME,FLAG);
OUTSTR(CRLF&"WRITING "&NAME&CRLF);
XFR(MFOCNM);
XFR(CAMNOM);
XFR(LENS);
XFR(PANPTR);
XFR(TILPTR);
XFR(FOCPTR);
XFR(REFPTR);
IF CAMNOM=2 THEN BEGIN XFR(ZOOPTR); XFR(ZPOT0); XFR(ZPOTD); END;
AXFR("XX[1,1]",18);
AXFR("YY[1,1]",12);
XFR(PPOT0);
XFR(PPOTD);
XFR(TPOT0);
XFR(TPOTD);
XFR(FPOT0);
XFR(FPOTD);
XFR(FMX);
XFR(FMY);
XFR(MRAT);
XFR(PAN);
XFR(TILT);
XFR(SWING);
XFR(CALERR);
AXFR(C[1],3);
AXFR("PP[1]",2);
AXFR(P0[1],3);
AXFR("DP[1]",3);
XFR(DATE);
XFR(TIME);
XFR(GROREF);
XFR(FOCAL);
XFR(OFFSET);
XFR(FSCALE);
XFR(SAVBUF[0]);
IF SAVBUF[0]≠0 THEN AXFR(SAVBUF[1],SAVBUF[0]);
RELEASE(DATA);
END;
⊃ inputs and outputs composite data sets;
INTERNAL PROCEDURE COMOUT;
BEGIN DEFINE XF(X)="ARRYOUT(DATA,X,1)",AF(X,N)="ARRYOUT(DATA,X,N)";
IF CAMNOM=2 THEN BEGIN XF(ZPOT0);XF(ZPOTD);END;
XF(PPOT0); XF(PPOTD);
XF(TPOT0); XF(TPOTD);
XF(FPOT0); XF(FPOTD);
XF(MRAT); XF(SWING);
AF(PP[1],2);
AF(P0[1],3);
AF(DP[1],3);
XF(FOCAL); XF(OFFSET);
XF(FSCALE); XF(GROREF);
IF CAMNOM=2 THEN BEGIN XF(DEV);AF(COEFF[1],2);END;
XF(DATE); XF(TIME);
XF(FMX); XF(FMY);
XF(PAN); XF(TILT);
XF(CALERR);
AF(C[1],3);
XF(SAVBUF[0]);
AF(SAVBUF[1],SAVBUF[0]);
END;
INTERNAL PROCEDURE COMIN;
BEGIN DEFINE XF(X)="ARRYIN(DATA,X,1)",AF(X,N)="ARRYIN(DATA,X,N)";
IF CAMNOM=2 THEN BEGIN XF(ZPOT0);XF(ZPOTD);END;
XF(PPOT0); XF(PPOTD);
XF(TPOT0); XF(TPOTD);
XF(FPOT0); XF(FPOTD);
XF(MRAT); XF(SWING);
AF(PP[1],2);
AF(P0[1],3);
AF(DP[1],3);
XF(FOCAL); XF(OFFSET);
XF(FSCALE); XF(GROREF);
IF CAMNOM=2 THEN BEGIN XF(DEV);AF(COEFF[1],2);END;
XF(DATE); XF(TIME);
XF(FMX); XF(FMY);
XF(PAN); XF(TILT);
XF(CALERR);
AF(C[1],3);
XF(SAVBUF[0]);
AF(SAVBUF[1],SAVBUF[0]);
END;
⊃ open and read or write entire composite file;
⊃ RETURNS TRUE IFF FILE FOUND;
INTERNAL BOOLEAN PROCEDURE COMREAD;
BEGIN INTEGER BRK,EOF,FLAG;
STRING NAME;
OPEN(DATA,"DSK",8,3,0,1000,BRK,EOF);
NAME ← "TV"&CVS(CAMNOM)&"L"&CVS(LENS)&".COM";
LOOKUP(DATA,NAME,FLAG);
IF FLAG THEN
BEGIN
OUTSTR(NAME&" NOT FOUND "&CRLF);
RETURN(FALSE);
END;
OUTSTR(CRLF&"RETRIEVING "&NAME&CRLF);
COMIN;
RELEASE(DATA);
RETURN(TRUE);
END;
INTERNAL PROCEDURE COMWRITE;
BEGIN INTEGER BRK,EOF,FLAG;
STRING NAME;
OPEN(DATA,"DSK",8,0,3,1000,BRK,EOF);
NAME ← "TV"&CVS(CAMNOM)&"L"&CVS(LENS)&".COM";
ENTER(DATA,NAME,FLAG);
OUTSTR(CRLF&"WRITING "&NAME&CRLF);
COMOUT;
RELEASE(DATA);
END;
⊃ prints selected portions of data structure
SETFLG is false for individual data set, true for composite;
INTERNAL PROCEDURE LPTDMP;
BEGIN DEFINE EOM= "&CRLF)",PRINT="OUT(LPTCH,",MSG=")",
__ = "STEP 1 UNTIL", PI="3.14159";
INTEGER I,J;
STRING ZOOSTR,ZOOSTR1;
SETFORMAT(2,6);
IF ¬LPTON THEN OPEN(LPT,"LPT",1,0,2,0,0,0);
LPTCH←LPT;
ZOOSTR←IF CAMNOM=2 THEN " ZOOM" ELSE NULL;
ZOOSTR1←IF CAMNOM=2 THEN CVG(ZOOPTR) ELSE " ";
PRINT FF&DATIM&CRLF&CRLF EOM;
PRINT"CAMERA NUMBER="&CVS(CAMNOM)&" WITH LENS# "&CVS(LENS)EOM;
IF ¬SETFLG THEN
BEGIN "IND"
PRINT" MANUAL FOCUS NUMBER="&CVG(MFOCNM)&CRLF&CRLF EOM;
PRINT" PAN TILT "&
"FOCUS REFERENCE"&ZOOSTR EOM;
PRINT" POT-UNITS: "&CVG(PANPTR)&CVG(TILPTR)&
CVG(FOCPTR)&CVF(REFPTR)&ZOOSTR1 EOM;
PRINT" DEGREES: "&CVG(PAN*180/PI)&CVG(TILT*180/PI)
&CRLF EOM;
PRINT CRLF&CRLF EOM;
PRINT" 1 2 3" );
PRINT" 4 5 6"EOM;
PRINT" "MSG;
FOR J←1 __ 6 DO PRINT CVG(XX[1,J])MSG;
PRINT CRLF MSG;
PRINT"SET #"&CVS(SETNUM)&": TABLE-XX: "MSG;
FOR J←1 __ 6 DO PRINT CVG(XX[2,J])MSG;
PRINT CRLF MSG;
PRINT" "MSG;
FOR J←1 __ 6 DO PRINT CVG(XX[3,J])MSG;
PRINT CRLF EOM;
PRINT" IMAGE-YY: "MSG;
FOR J←1 __ 6 DO PRINT CVG(YY[1,J])MSG;
PRINT CRLF MSG;
PRINT" "MSG;
FOR J←1 __ 6 DO PRINT CVG(YY[2,J])MSG;
PRINT CRLF&CRLF EOM;
END "IND" ELSE PRINT CRLF&CRLF EOM;
PRINT" POT: PPOT0 PPOTD ");
PRINT"TPOT0 TPOTD" EOM;
PRINT" CONSTANTS: "&CVG(PPOT0)&CVG(PPOTD)&CVG(TPOT0)&CVG(TPOTD)
&CRLF EOM;
PRINT" FPOT0 FPOTD"&(IF CAMNOM=2 THEN
" ZPOT0 ZPOTD" ELSE NULL) EOM;
PRINT" "&CVG(FPOT0)&CVG(FPOTD)&(IF CAMNOM=2 THEN
CVG(ZPOT0)&CVG(ZPOTD) ELSE NULL)&CRLF&CRLF EOM;
PRINT" CALERR FMX FMY ");
PRINT"MRAT PP[1] PP[2]"EOM;
PRINT" CAMERA: "&CVG(CALERR)&CVG(FMX)&CVG(FMY)&CVG(MRAT)
&CVG(PP[1])&CVG(PP[2])&CRLF EOM;
PRINT" MODEL: C[1] C[2] C[3] ");
PRINT"PAN TILT SWING"EOM;
PRINT" "&CVG(C[1])&CVG(C[2])&CVG(C[3])&
CVG(PAN*180/PI)&CVG(TILT*180/PI)&CVG(SWING)&CRLF EOM;
PRINT" P0[1] P0[2] P0[3] "
&" DP[1] DP[2] DP[3]"EOM;
PRINT" "&CVG(P0[1])&CVG(P0[2])&CVG(P0[3])
&CVG(DP[1])&CVG(DP[2])&CVG(DP[3])&CRLF EOM;
PRINT" FOCAL OFFSET SCALE" EOM;
PRINT" "&CVG(FOCAL)&CVG(OFFSET)&CVG(FSCALE)&CRLF EOM;
IF CAMNOM=2 THEN PRINT CRLF&"ZOOM COEFFICIENTS="&CVG(COEFF[1])&
CVG(COEFF[2])&" DEVIATION="&CVG(DEV)&CRLF EOM;
PRINT CRLF&"AVERAGE REFERENCE FOR DATA SETS="&CVF(GROREF) EOM;
IF SAVBUF[0]≠0 THEN
BEGIN
PRINT "THE FOLLOWING "&CVS(SAVBUF[0])&
" SETS WERE RELAXED TO GENERATE CAMERA MODEL:"EOM;
FOR I←1 __ SAVBUF[0] DO PRINT CVS(SAVBUF[I])&"," MSG;
PRINT CRLF EOM;
END;
SETFORMAT(0,6);
IF ¬LPTON THEN RELEASE(LPTCH);
END "LPTDMP";
END "UTIL";